#include <stdio.h>
#include <limits.h>

// 分治法求最大值和最小值
void findMinMax(int arr[], int left, int right, int *min, int *max) {
    // 子数组只有一个元素
    if (left == right) {
        *min = arr[left];
        *max = arr[left];
        return;
    }
    // 子数组有两个元素
    if (left + 1 == right) {
        if (arr[left] < arr[right]) {
            *min = arr[left];
            *max = arr[right];
        } else {
            *min = arr[right];
            *max = arr[left];
        }
        return;
    }
    // 二分数组
    int mid = (left + right) / 2;
    int left_min, left_max, right_min, right_max;
    
    // 递归求解左右子数组
    findMinMax(arr, left, mid, &left_min, &left_max);
    findMinMax(arr, mid + 1, right, &right_min, &right_max);
    
    // 合并结果：总最小为左右最小的较小者，总最大为左右最大的较大者
    *min = (left_min < right_min) ? left_min : right_min;
    *max = (left_max > right_max) ? left_max : right_max;
}

int main() {
    int n;
    printf("请输入数组长度n: ");
    scanf("%d", &n);
    int arr[n];
    printf("请输入%d个整数: ", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }
    
    int min, max;
    findMinMax(arr, 0, n - 1, &min, &max);
    
    printf("最小值: %d\n", min);
    printf("最大值: %d\n", max);
    return 0;
}